Data storage hardware has changed in recent years so that flash-based storage is much more common. Rotational media such as hard drives and optical disc drives are increasingly being replaced by flash-based storage, such as solid-state disk (SSD) drives, which have no or fewer moving parts. Solid-state disks are much more robust and are impervious to many types of environmental conditions that are harmful to previous media. For example, rotating media is particularly prone to shocks that can occur, for example, when a mobile computing device containing one is dropped. Flash-based storage also typically has much faster access times and each area of the storage can be accessed with uniform latency. Rotational media exhibits differing speed characteristics based on how close to the central spindle (where the disk rotates faster) data is stored. SSDs, on the other hand, have a fixed amount of time to access a given memory location, and do not have a traditional seek time (which refers to the time to move the reading head to a given location for rotational media).
Unfortunately, SSDs do introduce new limitations as far as how they are read, written, and particularly erased. Typical flash-based storage can only be erased a block at a time, although non-overlapping bits within a block can be set at any time. In a typical computing system, an operating system writes a first set of data to an SSD page, and if a user or the system modifies the data, the operating system either rewrites the entire page or some of the data to a new location, or erases the whole block and rewrites the entire contents of the page. SSD lifetimes are determined by an average number of times that a block can be erased before that area of the drive is no longer able to maintain data integrity (or at least cannot be effectively erased and rewritten). The repeated erasing and rewriting of blocks and pages, respectively, by operating systems only hastens an SSD's expiration.
Several techniques have been introduced to help SSDs last longer. For example, many drives now internally perform wear leveling, in which the firmware of the drive selects a location to store data in a manner that keeps each block erased about the same number of times. This means that the drive will not fail due to one area of the drive being overused while other areas are unused (which could result in the drive appearing to get smaller over time or failing entirely). In addition, the TRIM command was introduced to the Advanced Technology Attachment (ATA) standard to allow an operating system to inform an SSD which blocks of data are no longer in use so that the SSD can decide when to erase. Ironically, disk drives of all types do not know which blocks are in use. This is because operating systems write data and then often only mark a flag to indicate when data is deleted at the file system level. Because the drive does not typically understand the file system, the drive cannot differentiate a block in use by the file system from a block no longer in use because the data has been marked as deleted by the file system. The TRIM command provides this information to the drive, so that the drive can recycle unused blocks.
While these techniques are helpful, they still rely on the drive to mostly manage itself, and do not provide sufficient communication between the drive and the operating system to allow intelligent decision making outside of the drive to prolong drive life. Writes are made today at an application determined frequency and thus do not incorporate any knowledge of how the device is being written to over time and across applications. An application may repeatedly modify and save the same block of data, resulting in multiple erase and rewrite cycles on flash-based devices, which results in more wear of the device.